package com.company.jdk8;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;

import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;

public class StreamTest {

    public static void main(String[] args) {

        List<ExportTemperatureDto> temperatureList = new ArrayList<>();
        temperatureList.add(new ExportTemperatureDto( "haha",2));
        temperatureList.add(new ExportTemperatureDto( "haha",4));
        temperatureList.add(new ExportTemperatureDto( "haha",1));
        temperatureList.add(new ExportTemperatureDto("haha",3));


        System.out.println(temperatureList);


        //传统写法
//        TreeSet<ExportTemperatureDto> treeSet = new TreeSet<>(Comparator.comparing(ExportTemperatureDto::getPersonId));
//        for (ExportTemperatureDto temperatureDto : temperatureList){
//            treeSet.add(temperatureDto);
//        }
//        List<ExportTemperatureDto> result2 =  new ArrayList<>(treeSet);
//        System.err.println(result2);


        //jdk8的lambda写法
        //需引入
        //import static java.util.Comparator.comparing;
        //import static java.util.stream.Collectors.collectingAndThen;
        //import static java.util.stream.Collectors.toCollection;

        List<ExportTemperatureDto> result = temperatureList.stream()
                .collect(
                        collectingAndThen(
                                toCollection(
                                        () -> new TreeSet<>(comparing(ExportTemperatureDto::getPersonId))
                                ),
                                ArrayList::new
                        )
                );

        result.forEach(System.out::println);



        /*
            输出结果为：
                personId为1的，其名称为haha
                personId为2的，其名称为haha
            因为TreeSet底层是使用TreeMap进行实现的，传入了根据getPersonId进行比较的比较器
            在判断personId相同时，其比较结果为0，然后就会替换其value值，而key值是不会变化的，
            又因为TreeSet是将传入的元素作为key的，所以使用TreeSet时，当比较器比较的结果相同时，以不会将原来的值替换成比较后的值
         */

    }



}
